package com.egov.common.util;
//
//import org.csource.common.MyException;
//import org.csource.common.NameValuePair;
//import org.csource.fastdfs.*;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//import java.io.File;
//import java.io.IOException;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * @ClassName:  FastDfsFileUtil
// * @Description:fastdfs 文件上传
// */
////@Component
public class FastDfsFileUtil implements FileManagerConfig {
//    /**
//     * @Fields serialVersionUID
//     */
//    private static final long serialVersionUID = -726169352951175882L;
//
//    private static Logger log  = LoggerFactory.getLogger(FastDfsFileUtil.class);
//
//    private static TrackerClient  trackerClient;
//    private static TrackerServer  trackerServer;
//    private static StorageServer  storageServer;
//    private static StorageClient  storageClient;
//
//    /**
//     * 图片允许类型
//     */
//    private static final List<String> pictureList;
//
//    private static int condenseWidth;
//
//    private static int condenseHeight;
//
//    static { // Initialize Fast DFS Client configurations
//
//        try {
//            String classPath = new File(FastDfsFileUtil.class.getResource("/").getPath()).getCanonicalPath();
//
//            String fdfsClientConfigFilePath = classPath + File.separator + CLIENT_CONFIG_FILE;
//
//            log.info("Fast DFS configuration file path:{}" , fdfsClientConfigFilePath);
//            //"classpath*:conf/fdfs_client.conf"
//            ClientGlobal.init(fdfsClientConfigFilePath);
//
//            trackerClient = new TrackerClient();
//            trackerServer = trackerClient.getConnection();
//
//            storageClient = new StorageClient(trackerServer, storageServer);
//
//            boolean isAlive = ProtoCommon.activeTest(trackerServer.getSocket());
//
//            if(!isAlive) {
//                log.error("测试链接trackerServer服务器异常！");
//            }
//        } catch (Exception e) {
//            log.error("获取fastdfs配置文件异常！{}", e);
//        }
//        String[] strArr = new String[]{"JPG", "JPEG", "PNG", "GIF", "BMP", "WBMP"};
//        pictureList = Arrays.asList(strArr);
//        condenseWidth = 100;
//        condenseHeight = 100;
//    }
//
//
//    /**
//     * @Title: upload
//     * @Description:文件上传
//     * @param: @param file
//     * @param: @return
//     * @return: String
//     * @throws
//     */
//    public Map<String, Object> upload(FastDFSFile file,String groupName) {
//        Map<String, Object> map = new HashMap<>();
//
//
//        NameValuePair[] metaList = new NameValuePair[3];
//        metaList[0] = new NameValuePair("width", FILE_DEFAULT_WIDTH);
//        metaList[1] = new NameValuePair("heigth", FILE_DEFAULT_HEIGHT);
//        metaList[2] = new NameValuePair("author", FILE_DEFAULT_AUTHOR);
//
//        long startTime = System.currentTimeMillis();
//        String[] uploadResults = null;
//        try {
//            synchronized(storageClient) {
//                uploadResults = storageClient.upload_file(groupName,file.getContent(), file.getExt(), metaList);
//            }
//        } catch (IOException e) {
//            log.error("IO Exception when uploadind the file: " + file.getName(), e);
//            return null;
//        } catch (Exception e) {
//            log.error("Non IO Exception when uploadind the file: " + file.getName(), e);
//            return null;
//        }
//        log.info("upload_file time used: {} ms", (System.currentTimeMillis() - startTime));
//
//        if (uploadResults == null) {
//            log.error("upload file fail, error code: " + storageClient.getErrorCode());
//            return null;
//        }
//        String groupName1 		= uploadResults[0];
//        String remoteFileName   = uploadResults[1];
//
////		String fileAbsolutePath = PROTOCOL + trackerServer.getInetSocketAddress().getHostName()
////				+ SEPARATOR
////				+ TRACKER_NGNIX_PORT
////				+ SEPARATOR
////				+ groupName
////				+ SEPARATOR
////				+ remoteFileName;
//        map.put("groupName", groupName1);
//        map.put("remoteFileName", remoteFileName);
//
//        log.info("upload file successfully!!!  group_name: {}, remoteFileName: {}", groupName, remoteFileName);
//        return map;
//
//    }
//
//    /**
//     * @Title: downFile
//     * @Description: 文件下载
//     * @param: @param groupName
//     * @param: @param remoteFileName
//     * @param: @return
//     * @return: FileInfo
//     * @throws
//     */
//    public FileInfo downFile(String groupName, String remoteFileName) {
//        try {
//            synchronized(storageClient) {
//                return storageClient.get_file_info(groupName, remoteFileName);
//            }
//        } catch (IOException e) {
//            log.error("IO Exception: Get File from Fast DFS failed", e);
//        } catch (Exception e) {
//            log.error("Non IO Exception: Get File from Fast DFS failed", e);
//        }
//        return null;
//    }
//
//    /**
//     * @Title: downFile
//     * @Description: 文件下载
//     * @param: @param groupName
//     * @param: @param remoteFileName
//     * @param: @return
//     * @return: FileInfo
//     * @throws
//     */
//    public byte[] downFileByte(String groupName, String remoteFileName) {
//        try {
//            synchronized(storageClient) {
//                return storageClient.download_file(groupName,remoteFileName);
//            }
//        } catch (IOException e) {
//            log.error("IO Exception: Get File from Fast DFS failed", e);
//        } catch (Exception e) {
//            log.error("Non IO Exception: Get File from Fast DFS failed", e);
//        }
//        return new byte[0];
//    }
//
//    /**
//     * @throws MyException
//     * @throws IOException
//     * @Title: deleteFile
//     * @Description: 文件删除
//     * @param: @param groupName
//     * @param: @param remoteFileName
//     * @param: @throws Exception
//     * @return: void
//     * @throws
//     */
//    public void deleteFile(String groupName, String remoteFileName) throws IOException, MyException {
//        synchronized(storageClient) {
//            storageClient.delete_file(groupName, remoteFileName);
//            //删除缩略图
//            try {
//                remoteFileName = this.getThumbImagePath(remoteFileName);
//                storageClient.delete_file(groupName, remoteFileName);
//            } catch (Exception e) {
//                log.info("删除缩略图失败！可能是非图片执行了删除！");
//            }
//        }
//    }
//
//    /**
//     * @Title: getStoreStorages
//     * @Description:
//     * @param: @param groupName
//     * @param: @return
//     * @param: @throws IOException
//     * @return: StorageServer[]
//     * @throws
//     */
//    public StorageServer[] getStoreStorages(String groupName) throws IOException {
//        return trackerClient.getStoreStorages(trackerServer, groupName);
//    }
//
//    /**
//     * @Title: getFetchStorages
//     * @Description:
//     * @param: @param groupName
//     * @param: @param remoteFileName
//     * @param: @return
//     * @param: @throws IOException
//     * @return: ServerInfo[]
//     * @throws
//     */
//    public ServerInfo[] getFetchStorages(String groupName, String remoteFileName) throws IOException {
//        return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
//    }
//
//    /**
//     * @Title: checkFileExisted
//     * @Description:校验文件是否存在，不存在返回null
//     * @param: @param groupName
//     * @param: @param remoteFileName
//     * @param: @return
//     * @param: @throws IOException
//     * @param: @throws MyException
//     * @return: FileInfo
//     * @throws
//     */
//    public byte[] checkFile(String groupName, String remoteFileName) throws IOException, MyException {
//        synchronized(storageClient) {
//            return storageClient.download_file(groupName,remoteFileName);
//        }
//    }
//
//    /**
//     * @Title: uploadImage
//     * @Description:图片上传及压缩
//     * @param: @param file
//     * @return: Map
//     * @throws
//     */
//    /*public Map<String, Object> uploadImage (FastDFSFile file) {
//        if(pictureList.contains(file.getExt().toUpperCase())) {
//            Map<String, Object> arr = this.upload(file);
//            NameValuePair[] metaList = new NameValuePair[3];
//            metaList[0] = new NameValuePair("width", FILE_DEFAULT_WIDTH);
//            metaList[1] = new NameValuePair("heigth", FILE_DEFAULT_HEIGHT);
//            metaList[2] = new NameValuePair("author", FILE_DEFAULT_AUTHOR);
//            try {
//                //压缩图片
//                InputStream inputStream = new ByteArrayInputStream(file.getContent());
//                ByteArrayOutputStream out = new ByteArrayOutputStream();
//                InputStream[] input = new InputStream[]{inputStream};
//                Thumbnails.of(input).size(condenseWidth, condenseHeight).toOutputStream(out);
//                String prefixName = this.getPrefixName();
//                synchronized(storageClient) {
//                    storageClient.upload_file(arr.get("groupName").toString(), arr.get("remoteFileName").toString(), prefixName, out.toByteArray(), file.getExt(), metaList);
//                }
//                log.info("压缩图片上传完成！");
//            } catch (IOException e) {
//                log.error("图片压缩异常IO！{}", e);
//            } catch (MyException e) {
//                log.error("图片压缩异常My！{}", e.getMessage());
//            }
//            return arr;
//        } else {
//            throw new BusinessException("图片上传类型不允许！", ResultStatus.fail.toString());
//        }
//    }*/
//
//    public String getPrefixName() {
//        StringBuilder buffer = new StringBuilder();
//        buffer.append("_").append(condenseWidth).append("x").append(condenseHeight);
//        return new String(buffer);
//    }
//
//    public String getThumbImagePath(String masterFilename) {
//        StringBuilder buff = new StringBuilder(masterFilename);
//        int index = buff.lastIndexOf(".");
//        buff.insert(index, getPrefixName());
//        return buff.toString();
//    }
}
